﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//文本文件，二进制文件
//如果有整数10000，如果以ASCII码的形式输出到磁盘，则磁盘中占用5个字节，一个字符一个字节，而二进制形式输出，则在磁盘中只占4个字节
//ASCII形式，1的ASCII为49,0的ASCII码为48,00110001 00110000 00110000 00110000 00110000
//二进制形式,00000000 00000000 00100111 00010000
//int main()
//{
//	int a = 10000;
//	FILE* pf = fopen("test.txt", "wb");
//	fwrite(&a, 4, 1, pf);//⼆进制的形式写到⽂件中
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//标准流
//stdin - 标准输入流，从键盘中输入
//stdout - 标准输出流，输出至显示器界面
//stderr - 标准错误流，输出到显示器界面
//c语言启动时，默认打开3个流，都是FILE*类型，文件指针
//文件指针用来维护流的各种操作

//FILE

//每个被使用的文件都在内存中开辟了一个相应的文件信息区，用来存放文件的相关信息。这些信息都是保存在结构体变量中的。

//FILE* fopen(const char* filename, const char* mode)//打开文件

//int fclose(FILE* filename)//关闭文件

int main()
{
	/*FILE* pf = fopen("data.txt", "w");*/
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//int fputc(int character, FILE* stream)
	/*fputc('a', pf);
	fputc('b', pf);
	fputc('c', pf);
	fputc('d', pf);
	fputc('e', pf);*/

	/*int i = 0;
	for (i = 'a'; i <= 'z'; i++)
	{
		fputc(i, pf);
	}*/

	//int fgetc(FILE* stream)//成功后返回字符ASCII码值，错误返回EOF
	/*int ch = 0;*/
	//ch = fgetc(pf);//读取一个字符后光标后移
	//printf("%c\n", ch);
	//ch = fgetc(pf);
	//printf("%c\n", ch);
	//ch = fgetc(pf);
	//printf("%c\n", ch);
	//ch = fgetc(pf);
	//printf("%c\n", ch);

	//while ((ch = fgetc(pf)) != EOF)//如果位置指示符位于文件末尾，也返回EOF，所以可以通过光标的后移找到所有的字符并且打印
	//{
	//	printf("%c\n", ch);
	//}

	int ch = 0;
	ch = fgetc(stdin);//读取从键盘上输入的信息
	//fgetc适用于所有输入流
	//stdin标准输入流
	fputc(ch, stdout);//将字符输出到显示器上
	//fputc适用于所有输出流
	//stdout标准输出流

	fclose(pf);
	pf = NULL;
	
	return 0;
}